home *** CD-ROM | disk | FTP | other *** search
- program tststr4;
-
- {$APPTYPE CONSOLE}
-
- uses
- Windows,
- SysUtils;
-
- function PosCh(aCh : char; const S : string; aStart : integer) : integer;
- var
- i : integer;
- begin
- for i := aStart to length(S) do
- if (S[i] = aCh) then begin
- Result := i;
- Exit;
- end;
- Result := 0;
- end;
-
- function UniqueChars1(const aSt : string) : string;
- var
- i : integer;
- begin
- Result := '';
- for i := 1 to length(aSt) do begin
- if (PosCh(aSt[i], Result, 1) = 0) then
- Result := Result + aSt[i];
- end;
- end;
-
- function UniqueChars(const aSt : string) : string;
- var
- i : integer;
- Ch : char;
- DestInx : integer;
- CharSet : set of char;
- begin
- {clear the set of found characters}
- FillChar(CharSet, sizeof(CharSet), 0);
- {find the unique characters in the input string}
- for i := 1 to length(aSt) do
- Include(CharSet, aSt[i]);
- {store the unique characters in the Result string}
- SetLength(Result, length(aSt));
- DestInx := 0;
- for Ch := #0 to #255 do
- if (Ch in CharSet) then begin
- inc(DestInx);
- Result[DestInx] := Ch;
- end;
- {readjust the length of the result string}
- SetLength(Result, DestInx);
- end;
-
- var
- i : integer;
- StartTime : DWORD;
- begin
- writeln(UniqueChars1('abcdefghijklmnopababababababababaababbaabababababab'));
- writeln(UniqueChars('abcdefghijklmnopababababababababaababbaabababababab'));
-
- writeln('testing normal routine...');
- StartTime := GetTickCount;
- for i := 1 to 100000 do
- UniqueChars1('abcdefghijklmnopababababababababaababbaabababababab');
- writeln('time taken: ', GetTickCount - StartTime);
-
- writeln('testing faster routine...');
- StartTime := GetTickCount;
- for i := 1 to 100000 do
- UniqueChars('abcdefghijklmnopababababababababaababbaabababababab');
- writeln('time taken: ', GetTickCount - StartTime);
- readln;
- end.
-